//
//  NetworkTools.swift
//  SinaWeibo
//
//  Created by apple on 15/11/15.
//  Copyright © 2015年 apple. All rights reserved.
//

import UIKit
import AFNetworking
private let  weiboDomain = "com.baidu.data.error"

//线上
private let hostname = "https://api.weibo.com/"

//测试
//private let hostname = "https://test.weibo.com/"

//swift中 枚举类型可以是任意类型
enum HTTPMethod: String {
    case POST = "POST"
    case GET = "GET"
}

class NetworkTools: AFHTTPSessionManager {
    
    //定义单例对象
    static let sharedTools: NetworkTools = {
        let url = NSURL(string: hostname)
        let tools = NetworkTools(baseURL: url)
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tools
    }()
    
    //定义网络访问方法  以后所有的网络访问都经过该方法调用 AFN
    
    //加载字典数据
    func requestJsonDict(method: HTTPMethod, urlString: String, parmaters: [String : AnyObject]?,finished: (result: [String : AnyObject]?, error: NSError?) -> ()) {
        //调用AFN具体的 GET,POST方法
        
        if method == HTTPMethod.GET {
            GET(urlString, parameters: parmaters, success: { (_, result) -> Void in
                //校验数据是否是字典
                if let dict = result as? [String : AnyObject] {
                    //执行成功的回调
                    finished(result: dict, error: nil)
                    return
                }
                
                //数据格式不匹配
                //自定义错误信息
                //一般自定义errorcode  为负值
                let dataError = NSError(domain: weiboDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据错误"])
                finished(result: nil, error: dataError)
                }) { (_, error) -> Void in
                    //执行错误的回调
                    finished(result: nil, error: error)
                    print(error)
            }
        } else {
            POST(urlString, parameters: parmaters, success: { (_, result) -> Void in
                //校验数据是否是字典
                if let dict = result as? [String : AnyObject] {
                    //执行成功的回调
                    finished(result: dict, error: nil)
                    return
                }
                
                //数据格式不匹配 
                //自定义错误信息
                //一般自定义errorcode  为负值
                let dataError = NSError(domain: weiboDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据错误"])
                finished(result: nil, error: dataError)
                }) { (_, error) -> Void in
                    //执行错误的回调
                    finished(result: nil, error: error)
                    print(error)
            }
        }
    }
    
    
    //添加上传图片的方法 
    func uploadImage(urlString: String,parmaters: [String : AnyObject]?,imageData: NSData,finished: (result: [String : AnyObject]?, error: NSError?) -> ()) {
    
        POST(urlString, parameters: parmaters, constructingBodyWithBlock: { (multipartFormData) -> Void in
            
            //1.data  要上传的文件的二进制数据
            //2.name 表示上传的文件服务器对应的字段
            //3.filename 表示服务器接受后 存储的名字   名字可以随便取
            //4.上传文件的格式  image/jpeg
            multipartFormData.appendPartWithFileData(imageData, name: "pic", fileName: "OMG", mimeType: "image/jpeg")
            }, success: { (_, result) -> Void in
                if let dict = result as? [String : AnyObject] {
                    finished(result: dict, error: nil)
                }

            }) { (_, error) -> Void in
                finished(result: nil, error: error)
                print(error)
        }
    }
}
